Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java bytecode</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Java_bytecode"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_bytecode rootpage-Java_bytecode skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Java bytecode</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p class="mw-empty-elt">

</p><p><b>Java bytecode</b> is the instruction set of the <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> (JVM), the language to which <a href="Java_(programming_language)" title="Java (programming language)">Java</a> and other JVM-compatible <a href="Source_code" title="Source code">source code</a> is <a href="Compiler" title="Compiler">compiled</a>.<sup id="cite_ref-oracle_jvm_spec_1-0" class="reference"><a href="#cite_note-oracle_jvm_spec-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Each instruction is represented by a single <a href="Byte" title="Byte">byte</a>, hence the name <a href="Bytecode" title="Bytecode">bytecode</a>, making it a compact form of <a href="Data" title="Data">data</a>.<sup id="cite_ref-JVM_Book_2-0" class="reference"><a href="#cite_note-JVM_Book-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>Due to the nature of bytecode, a Java bytecode <a href="Computer_program" title="Computer program">program</a> is runnable on any machine with a compatible JVM, without the lengthy process of compiling from source code.
</p><p>Java bytecode is used at <a href="Runtime_(program_lifecycle_phase)" class="mw-redirect" title="Runtime (program lifecycle phase)">runtime</a> either <a href="Interpreter_(computing)" title="Interpreter (computing)">interpreted</a> by a JVM or compiled to machine code via <a href="Just-in-time_compilation" title="Just-in-time compilation">just-in-time</a> (JIT) compilation and run as a native application.
</p><p>As Java bytecode is designed for a cross-platform compatibility and security, a Java bytecode application tends to run consistently across various <a href="Computer_hardware" title="Computer hardware">hardware</a> and <a href="Software" title="Software">software</a> configurations.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Relation_to_Java">Relation to Java</h2></div>
<p>In general, a Java <a href="Programmer" title="Programmer">programmer</a> does not need to understand Java bytecode or even be aware of it. However, as suggested in the <a href="IBM" title="IBM">IBM</a> developerWorks journal, "Understanding bytecode and what bytecode is likely to be generated by a <a href="Java_compiler" title="Java compiler">Java compiler</a> helps the Java programmer in the same way that knowledge of <a href="Assembly_language" title="Assembly language">assembly</a> helps the <a href="C_(programming_language)" title="C (programming language)">C</a> or <a href="C%2B%2B" title="C++">C++</a> programmer."<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Instruction_set_architecture">Instruction set architecture</h2></div>
<p>The bytecode comprises various instruction types, including data manipulation, control transfer, object creation and manipulation, and method invocation, all integral to Java's object-oriented programming model.<sup id="cite_ref-oracle_jvm_spec_1-1" class="reference"><a href="#cite_note-oracle_jvm_spec-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>The JVM is both a <a href="Stack_machine" title="Stack machine">stack machine</a> and a <a href="Register_machine" title="Register machine">register machine</a>. Each <a href="Call_stack#STACK-FRAME" title="Call stack">frame</a> for a method call has an "operand stack" and an array of "local variables".<sup id="cite_ref-jvm_5-0" class="reference"><a href="#cite_note-jvm-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 2.6">: 2.6 </span></sup> <sup id="cite_ref-JVM_Book_2-1" class="reference"><a href="#cite_note-JVM_Book-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> The operand stack is used for passing operands to computations and for receiving the return value of a called method, while local variables serve the same purpose as <a href="Processor_register" title="Processor register">registers</a> and are also used to pass method arguments. The maximum size of the operand stack and local variable array, computed by the compiler, is part of the attributes of each method.<sup id="cite_ref-jvm_5-1" class="reference"><a href="#cite_note-jvm-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 4.7.3">: 4.7.3 </span></sup> Each can be independently sized from 0 to 65535 values, where each value is 32 bits. <code class="mw-highlight mw-highlight-lang-java mw-content-ltr" style="" dir="ltr"><span class="kt">long</span></code> and <code class="mw-highlight mw-highlight-lang-java mw-content-ltr" style="" dir="ltr"><span class="kt">double</span></code> types, which are 64 bits, take up two consecutive local variables<sup id="cite_ref-jvm_5-2" class="reference"><a href="#cite_note-jvm-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 2.6.1">: 2.6.1 </span></sup> (which need not be 64-bit aligned in the local variables array) or one value in the operand stack (but are counted as two units in the depth of the stack).<sup id="cite_ref-jvm_5-3" class="reference"><a href="#cite_note-jvm-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 2.6.2">: 2.6.2 </span></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Instruction_set">Instruction set</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="List_of_Java_bytecode_instructions" title="List of Java bytecode instructions">List of Java bytecode instructions</a></div>
<p>Each <a href="Bytecode" title="Bytecode">bytecode</a> is composed of one byte that represents the <a href="Opcode" title="Opcode">opcode</a>, along with zero or more bytes for operands.<sup id="cite_ref-jvm_5-4" class="reference"><a href="#cite_note-jvm-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 2.11">: 2.11 </span></sup>
</p><p>Of the 256 possible byte-long <a href="Opcode" title="Opcode">opcodes</a>, as of 2015, 202 are in use (~79%), 51 are reserved for future use (~20%), and 3 instructions (~1%) are permanently reserved for JVM implementations to use.<sup id="cite_ref-jvm_5-5" class="reference"><a href="#cite_note-jvm-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 6.2">: 6.2 </span></sup> Two of these (<code>impdep1</code> and <code>impdep2</code>) are to provide traps for implementation-specific software and hardware, respectively. The third is used for debuggers to implement breakpoints.
</p><p>Instructions fall into a number of broad groups:
</p>
<ul><li>Load and store (e.g. <code>aload_0</code>, <code>istore</code>)</li>
<li>Arithmetic and logic (e.g. <code>ladd</code>, <code>fcmpl</code>)</li>
<li>Type conversion (e.g. <code>i2b</code>, <code>d2i</code>)</li>
<li>Object creation and manipulation (<code>new</code>, <code>putfield</code>)</li>
<li>Operand stack management (e.g. <code>swap</code>, <code>dup2</code>)</li>
<li>Control transfer (e.g. <code>ifeq</code>, <code>goto</code>)</li>
<li>Method invocation and return (e.g. <code>invokespecial</code>, <code>areturn</code>)</li></ul>
<p>There are also a few instructions for a number of more specialized tasks such as exception throwing, synchronization, etc.
</p><p>Many instructions have prefixes and/or suffixes referring to the types of operands they operate on.<sup id="cite_ref-jvm_5-6" class="reference"><a href="#cite_note-jvm-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 2.11.1">: 2.11.1 </span></sup> These are as follows:
</p>
<table class="wikitable">

<tbody><tr>
<th>Prefix/suffix</th>
<th>Operand type
</th></tr>
<tr>
<td><code>i</code></td>
<td>integer
</td></tr>
<tr>
<td><code>l</code></td>
<td>long
</td></tr>
<tr>
<td><code>s</code></td>
<td>short
</td></tr>
<tr>
<td><code>b</code></td>
<td>byte
</td></tr>
<tr>
<td><code>c</code></td>
<td>character
</td></tr>
<tr>
<td><code>f</code></td>
<td>float
</td></tr>
<tr>
<td><code>d</code></td>
<td>double
</td></tr>
<tr>
<td><code>a</code></td>
<td>reference
</td></tr></tbody></table>
<p>For example, <code>iadd</code> will add two integers, while <code>dadd</code> will add two doubles. The <code>const</code>, <code>load</code>, and <code>store</code> instructions may also take a suffix of the form <code>_<i>n</i></code>, where <i>n</i> is a number from 0–3 for <code>load</code> and <code>store</code>. The maximum <i>n</i> for <code>const</code> differs by type.
</p><p>The <code>const</code> instructions push a value of the specified type onto the stack. For example, <code>iconst_5</code> will push an integer (32 bit value) with the value 5 onto the stack, while <code>dconst_1</code> will push a double (64 bit floating point value) with the value 1 onto the stack. There is also an <code>aconst_null</code>, which pushes a <code class="mw-highlight mw-highlight-lang-java mw-content-ltr" style="" dir="ltr"><span class="kc">null</span></code> reference. The <i>n</i> for the <code>load</code> and <code>store</code> instructions specifies the index in the local variable array to load from or store to. The <code>aload_0</code> instruction pushes the object in local variable 0 onto the stack (this is usually the <code><a href="This_(computer_programming)" title="This (computer programming)">this</a></code> object). <code>istore_1</code> stores the integer on the top of the stack into local variable 1. For local variables beyond 3 the suffix is dropped and operands must be used.
</p>
<div class="mw-heading mw-heading2"><h2 id="Example">Example</h2></div>
<p>Consider the following Java code:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="nl">outer</span><span class="p">:</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">1000</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="k">continue</span><span class="w"> </span><span class="n">outer</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>A Java compiler might translate the Java code above into bytecode as follows, assuming the above was put in a method:
</p>
<div class="mw-highlight mw-highlight-lang-jasmin mw-content-ltr" dir="ltr"><pre><span class="mi">0</span><span class="p">:</span><span class="w"> </span><span class="kr">iconst_2</span>
<span class="mi">1</span><span class="p">:</span><span class="w"> </span><span class="kr">istore_1</span>
<span class="mi">2</span><span class="p">:</span><span class="w"> </span><span class="kr">iload_1</span>
<span class="mi">3</span><span class="p">:</span><span class="w"> </span><span class="kr">sipush</span><span class="w"> </span><span class="mi">1000</span>
<span class="mi">6</span><span class="p">:</span><span class="w"> </span><span class="kr">if_icmpge</span><span class="w"> </span><span class="mi">44</span>
<span class="mi">9</span><span class="p">:</span><span class="w"> </span><span class="kr">iconst_2</span>
<span class="mi">10</span><span class="p">:</span><span class="w"> </span><span class="kr">istore_2</span>
<span class="mi">11</span><span class="p">:</span><span class="w"> </span><span class="kr">iload_2</span>
<span class="mi">12</span><span class="p">:</span><span class="w"> </span><span class="kr">iload_1</span>
<span class="mi">13</span><span class="p">:</span><span class="w"> </span><span class="kr">if_icmpge</span><span class="w"> </span><span class="mi">31</span>
<span class="mi">16</span><span class="p">:</span><span class="w"> </span><span class="kr">iload_1</span>
<span class="mi">17</span><span class="p">:</span><span class="w"> </span><span class="kr">iload_2</span>
<span class="mi">18</span><span class="p">:</span><span class="w"> </span><span class="kr">irem</span>
<span class="mi">19</span><span class="p">:</span><span class="w"> </span><span class="kr">ifne</span><span class="w"> </span><span class="mi">25</span>
<span class="mi">22</span><span class="p">:</span><span class="w"> </span><span class="kr">goto</span><span class="w"> </span><span class="mi">38</span>
<span class="mi">25</span><span class="p">:</span><span class="w"> </span><span class="kr">iinc</span><span class="w"> </span><span class="nl">2,</span><span class="w"> </span><span class="mi">1</span>
<span class="mi">28</span><span class="p">:</span><span class="w"> </span><span class="kr">goto</span><span class="w"> </span><span class="mi">11</span>
<span class="mi">31</span><span class="p">:</span><span class="w"> </span><span class="kr">getstatic</span><span class="w"> </span><span class="vc">#84;</span><span class="w"> </span><span class="kt">//</span><span class="w"> </span><span class="nl">Field</span><span class="w"> </span><span class="nl">java/lang/System.out</span><span class="p">:</span><span class="nl">Ljava/io/PrintStream;</span>
<span class="mi">34</span><span class="p">:</span><span class="w"> </span><span class="kr">iload_1</span>
<span class="mi">35</span><span class="p">:</span><span class="w"> </span><span class="kr">invokevirtual</span><span class="w"> </span><span class="err">#85</span><span class="c1">; // Method java/io/PrintStream.println:(I)V</span>
<span class="mi">38</span><span class="p">:</span><span class="w"> </span><span class="kr">iinc</span><span class="w"> </span><span class="nl">1,</span><span class="w"> </span><span class="mi">1</span>
<span class="mi">41</span><span class="p">:</span><span class="w"> </span><span class="kr">goto</span><span class="w"> </span><span class="mi">2</span>
<span class="mi">44</span><span class="p">:</span><span class="w"> </span><span class="kr">return</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Generation">Generation</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="List_of_JVM_languages" title="List of JVM languages">List of JVM languages</a></div>
<p>The most common language targeting <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> by producing Java bytecode is Java. Originally only one compiler existed, the <a href="Javac" title="Javac">javac</a> compiler from <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>, which compiles <a href="Java_source_code" class="mw-redirect" title="Java source code">Java source code</a> to Java bytecode; but because all the specifications for Java bytecode are now available, other parties have supplied compilers that produce Java bytecode. Examples of other compilers include:
</p>
<ul><li>Eclipse compiler for Java (ECJ)</li>
<li><a href="Jikes" title="Jikes">Jikes</a>, compiles from Java to Java bytecode (developed by <a href="IBM" title="IBM">IBM</a>, implemented in <a href="C%2B%2B" title="C++">C++</a>)</li>
<li>Espresso, compiles from Java to Java bytecode (Java 1.0 only)</li>
<li><a href="GNU_Compiler_for_Java" title="GNU Compiler for Java">GNU Compiler for Java</a> (GCJ), compiles from Java to Java bytecode; it can also compile to native <a href="Machine_code" title="Machine code">machine code</a> and was part of the <a href="GNU_Compiler_Collection" title="GNU Compiler Collection">GNU Compiler Collection</a> (GCC) up until version 6.</li></ul>
<p>Some projects provide Java assemblers to enable writing Java bytecode by hand. Assembly code may be also generated by machine, for example by a compiler targeting a <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a>. Notable Java assemblers include:
</p>
<ul><li>Jasmin, takes text descriptions for Java classes, written in a simple assembly-like syntax using Java virtual machine instruction set and generates a Java class file<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup></li>
<li>Jamaica, a <a href="Macro_(computer_science)" title="Macro (computer science)">macro</a> <a href="Assembly_language" title="Assembly language">assembly language</a> for the <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a>. Java syntax is used for class or interface definition. Method bodies are specified using bytecode instructions.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup></li>
<li>Krakatau Bytecode Tools, currently contains three tools: a decompiler and disassembler for Java classfiles and an assembler to create classfiles.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup></li>
<li>Lilac, an assembler and disassembler for the <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a>.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup></li></ul>
<p>Others have developed compilers, for different programming languages, to target the Java virtual machine, such as:
</p>
<ul><li><a href="ColdFusion" class="mw-redirect" title="ColdFusion">ColdFusion</a></li>
<li><a href="JRuby" title="JRuby">JRuby</a> and <a href="Jython" title="Jython">Jython</a>, two <a href="Scripting_language" title="Scripting language">scripting languages</a> based on <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a> and <a href="Python_(programming_language)" title="Python (programming language)">Python</a></li>
<li><a href="Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Apache Groovy</a>, optionally typed and dynamic general-purpose language, with static-typing and static compilation capabilities</li>
<li><a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a>, a type-safe general-purpose programming language supporting object-oriented and functional programming</li>
<li><a href="JGNAT" class="mw-redirect" title="JGNAT">JGNAT</a> and AppletMagic, compile from the language <a href="Ada_(programming_language)" title="Ada (programming language)">Ada</a> to Java bytecode</li>
<li><a href="Java_virtual_machine#C_to_bytecode_compilers" title="Java virtual machine">C to Java byte-code compilers</a> </li>
<li><a href="Clojure" title="Clojure">Clojure</a>, a functional, immutable, general-purpose programming language in the <a href="Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a> family with a strong emphasis on concurrency</li>
<li><a href="Kawa_(Scheme_implementation)" title="Kawa (Scheme implementation)">Kawa</a>, an implementation of the <a href="Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a> programming language, also a dialect of <a href="Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>.</li>
<li>MIDletPascal</li>
<li><a href="JavaFX_Script" title="JavaFX Script">JavaFX Script</a> code is compiled to Java bytecode</li>
<li><a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a>, a statically-typed general-purpose programming language with type inference</li>
<li><a href="Object_Pascal" title="Object Pascal">Object Pascal</a> source code is compiled to Java bytecode using the <a href="Free_Pascal" title="Free Pascal">Free Pascal</a> 3.0+ compiler.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Execution">Execution</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a></div>
<p>There are several Java virtual machines available today to execute Java bytecode, both free and commercial products. If executing bytecode in a virtual machine is undesirable, a developer can also compile Java source code or bytecode directly to native machine code with tools such as the <a href="GNU_Compiler_for_Java" title="GNU Compiler for Java">GNU Compiler for Java</a> (GCJ). Some processors can execute Java bytecode natively. Such processors are termed <i><a href="Java_processor" title="Java processor">Java processors</a></i>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Support_for_dynamic_languages">Support for dynamic languages</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="List_of_JVM_languages" title="List of JVM languages">List of JVM languages</a></div>
<p>The <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> provides some support for <a href="Type_system#Dynamic_typing" title="Type system">dynamically typed languages</a>. Most of the extant JVM instruction set is <a href="Type_system#Static_typing" title="Type system">statically typed</a> - in the sense that method calls have their signatures type-checked at <a href="Compile_time" title="Compile time">compile time</a>, without a mechanism to defer this decision to <a href="Run_time_(program_lifecycle_phase)" class="mw-redirect" title="Run time (program lifecycle phase)">run time</a>, or to choose the method dispatch by an alternative approach.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p><p><a href="Java_Community_Process" title="Java Community Process">JSR</a> 292 (<i>Supporting Dynamically Typed Languages on the Java Platform</i>)<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> added a new <code>invokedynamic</code> instruction at the JVM level, to allow method invocation relying on dynamic <a href="Type_system#Type_checking" title="Type system">type checking</a> (instead of the extant statically type-checked <code>invokevirtual</code> instruction). The <a href="Da_Vinci_Machine" title="Da Vinci Machine">Da Vinci Machine</a> is a prototype virtual machine implementation that hosts JVM extensions aimed at supporting dynamic languages. All JVMs supporting <a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">JSE</a> 7 also include the <code>invokedynamic</code> opcode.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1266661725">
/* start https://en.wikipedia.org/ */


.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}


/* end https://en.wikipedia.org/ */
</style>
<ul><li><a href="Byte_Code_Engineering_Library" title="Byte Code Engineering Library">Byte Code Engineering Library</a></li>
<li><a href="Common_Intermediate_Language" title="Common Intermediate Language">Common Intermediate Language</a> (CIL), Microsoft's rival to Java bytecode</li>
<li><a href="Java_backporting_tools" class="mw-redirect" title="Java backporting tools">Java backporting tools</a></li>
<li><a href="Java_class_file" title="Java class file">Java class file</a></li>
<li><a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a></li>
<li><a href="JStik" title="JStik">JStik</a></li>
<li><a href="ObjectWeb_ASM" title="ObjectWeb ASM">ObjectWeb ASM</a></li>
<li><a href="List_of_Java_bytecode_instructions" title="List of Java bytecode instructions">List of Java bytecode instructions</a></li>
<li><a href="List_of_JVM_languages" title="List of JVM languages">List of JVM languages</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width reflist-columns-2">
<ol class="references">
<li id="cite_note-oracle_jvm_spec-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-oracle_jvm_spec_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-oracle_jvm_spec_1-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/specs/jvms/se8/html/">"Java Virtual Machine Specification"</a>. Oracle<span class="reference-accessdate">. Retrieved <span class="nowrap">14 November</span> 2023</span>.</cite></span>
</li>
<li id="cite_note-JVM_Book-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-JVM_Book_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-JVM_Book_2-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFLindholm2015" class="citation book cs1">Lindholm, Tim (2015). <i>The Java Virtual Machine Specification</i>. Oracle. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0133905908</bdi>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite id="CITEREFArnold1996" class="citation journal cs1">Arnold, Ken (1996). "The Java Programming Language". <i>Sun Microsystems</i>. <b>1</b> (1): <span class="nowrap">30–</span>40.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://developer.ibm.com/languages/java/">"IBM Developer"</a>. <i>developer.ibm.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">20 February</span> 2006</span>.</cite></span>
</li>
<li id="cite_note-jvm-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-jvm_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-jvm_5-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-jvm_5-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-jvm_5-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-jvm_5-4"><sup><i><b>e</b></i></sup></a> <a href="#cite_ref-jvm_5-5"><sup><i><b>f</b></i></sup></a> <a href="#cite_ref-jvm_5-6"><sup><i><b>g</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFLindholmYellinBrachaBuckley2015" class="citation book cs1">Lindholm, Tim; Yellin, Frank; Bracha, Gilad; Buckley, Alex (13 February 2015). <a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/specs/jvms/se8/html/"><i>The Java Virtual Machine Specification</i></a> (Java SE 8&nbsp;ed.).</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://jasmin.sourceforge.net/">"Jasmin Home Page"</a>. <i>jasmin.sourceforge.net</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2 June</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite id="CITEREFHuang" class="citation web cs1">Huang, James Jianbo. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20231114000632/https://www.infoworld.com/article/2072355/learn-to-speak-jamaican.html">"Jamaica: The Java virtual machine (JVM) macro assembler"</a>. <i>JavaWorld</i>. Archived from <a rel="nofollow" class="external text" href="https://www.javaworld.com/article/2072355/core-java/learn-to-speak-jamaican.html">the original</a> on 14 November 2023<span class="reference-accessdate">. Retrieved <span class="nowrap">2 June</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/Storyyeller/Krakatau">"Storyyeller/Krakatau"</a>. 1 June 2024<span class="reference-accessdate">. Retrieved <span class="nowrap">2 June</span> 2024</span> – via GitHub.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://lilac.sourceforge.net/">"Lilac - a Java assembler"</a>. <i>lilac.sourceforge.net</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2 June</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://wiki.freepascal.org/FPC_New_Features_3.0">"FPC New Features 3.0.0 - Free Pascal wiki"</a>. <i>wiki.freepascal.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2 June</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://wiki.freepascal.org/FPC_JVM">"FPC JVM - Free Pascal wiki"</a>. <i>wiki.freepascal.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2 June</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite id="CITEREFNutter2007" class="citation web cs1">Nutter, Charles (3 January 2007). <a rel="nofollow" class="external text" href="http://headius.blogspot.com/2007/01/invokedynamic-actually-useful.html">"InvokeDynamic: Actually Useful?"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">25 January</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.jcp.org/en/jsr/detail?id=292">"The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 292"</a>. <i>www.jcp.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2 June</span> 2024</span>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1290876196">
/* start https://en.wikipedia.org/ */


.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:var(--background-color-interactive-subtle,#f8f9fa);display:flow-root}.mw-parser-output .infobox .side-box{font-size:100%}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1;min-width:0}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1237033735">
/* start https://en.wikipedia.org/ */


@media print{body.ns-0 .mw-parser-output .sistersitebox{display:none!important}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}


/* end https://en.wikipedia.org/ */
</style><div class="side-box side-box-right sistersitebox"><style data-mw-deduplicate="TemplateStyles:r1126788409">
/* start https://en.wikipedia.org/ */


.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}


/* end https://en.wikipedia.org/ */
</style>
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">The Wikibook <i><a href="https://en.wikibooks.org/wiki/Java_Programming" class="extiw external" title="wikibooks:Java Programming">Java Programming</a></i> has a page on the topic of: <i><b><a href="https://en.wikibooks.org/wiki/Java_Programming/Byte_Code" class="extiw external" title="wikibooks:Java Programming/Byte Code">Java bytecode</a></b></i></div></div>
</div>
<ul><li><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/specs/jvms/se8/html/">Oracle's Java Virtual Machine Specification</a></li>
<li><a rel="nofollow" class="external text" href="http://www.is-research.de/info/vmlanguages/">Programming Languages for the Java Virtual Machine</a></li>
<li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130618025348/http://www.drgarbage.com/bytecode-visualizer.html">Bytecode Visualizer – bytecode viewer and debugger (free Eclipse plugin)</a></li>
<li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090809232522/http://www.adaptj.com/main/stacktrace">AdaptJ StackTrace – bytecode level debugging with a full control of the stack, the local variables, and the execution flow</a></li>
<li><a rel="nofollow" class="external text" href="http://lulachronicles.blogspot.com">Java Class Unpacker – plugin for Total Commander, it lets open class files as compressed archives and see fields and methods as files. The bytecode can be viewed as text using F3</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Java_(software_platform)419" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="3"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="Java_(software_platform)419" style="font-size:114%;margin:0 4em"><a href="Java_(software_platform)" title="Java (software platform)">Java (software platform)</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platforms</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_virtual_machine" title="Java virtual machine">JVM</a></li>
<li><a href="Java_Platform%2C_Micro_Edition" title="Java Platform, Micro Edition">Java ME</a> (Micro)</li>
<li><a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">Java SE</a> (Standard)</li>
<li><a href="Jakarta_EE" title="Jakarta EE">Jakarta EE</a> (Enterprise)</li>
<li><a href="Java_Card" title="Java Card">Java Card</a></li>
<li><a href="Android_software_development#SDK" title="Android software development">Android SDK</a></li>
<li><a href="GraalVM" title="GraalVM">GraalVM</a></li></ul>
</div></td><td class="noviewer navbox-image" rowspan="5" style="width:1px;padding:0 0 0 2px"><div><span typeof="mw:File"></span></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Technologies</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Oracle</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Squawk_virtual_machine" title="Squawk virtual machine">Squawk</a></li>
<li><a href="Java_Development_Kit" title="Java Development Kit">Java Development Kit</a></li>
<li><a href="OpenJDK" title="OpenJDK">OpenJDK</a></li>
<li><a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a></li>
<li><a href="JavaFX" title="JavaFX">JavaFX</a></li>
<li><a href="Maxine_Virtual_Machine" title="Maxine Virtual Machine">Maxine VM</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platform</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_applet" title="Java applet">Applets</a></li>
<li><a href="Jakarta_Servlet" title="Jakarta Servlet">Servlets</a></li>
<li><a href="MIDlet" title="MIDlet">MIDlets</a></li>
<li><a href="Jakarta_Server_Pages" title="Jakarta Server Pages">JSP</a></li>
<li><a href="Jakarta_Faces" title="Jakarta Faces">JSF</a></li>
<li><a href="Java_Web_Start" title="Java Web Start">Web Start</a> (JNLP)</li>
<li><a href="Pack200" title="Pack200">Pack200</a></li>
<li><a href="Java_Platform_Module_System" title="Java Platform Module System">Modules</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Major<br>third-party</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Blackdown_Java" title="Blackdown Java">Blackdown</a></li>
<li><a href="Eclipse_(software)" title="Eclipse (software)">Eclipse</a></li>
<li><a href="GNU_Classpath" title="GNU Classpath">GNU Classpath</a></li>
<li><a href="Google_Web_Toolkit" title="Google Web Toolkit">GWT</a></li>
<li><a href="Apache_Harmony" title="Apache Harmony">Harmony</a></li>
<li><a href="Hibernate_(framework)" title="Hibernate (framework)">Hibernate</a></li>
<li><a href="IcedTea" title="IcedTea">IcedTea</a></li>
<li><a href="Jazelle" title="Jazelle">Jazelle</a></li>
<li><a href="Spring_Framework" title="Spring Framework">Spring</a></li>
<li><a href="Apache_Struts" title="Apache Struts">Struts</a></li>
<li><a href="Oracle_TopLink" title="Oracle TopLink">TopLink</a></li>
<li><a href="WildFly" title="WildFly">WildFly</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">History</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_version_history" title="Java version history">Java version history</a></li>
<li><a href="Java_Community_Process" title="Java Community Process">Java Community Process</a></li>
<li><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a></li>
<li><a href="Free_Java_implementations" title="Free Java implementations">Free Java implementations</a></li>
<li>Slogan: <i><a href="Write_once%2C_run_anywhere" title="Write once, run anywhere">Write once, run anywhere</a></i></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="List_of_JVM_languages" title="List of JVM languages">JVM<br>languages</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_(programming_language)" title="Java (programming language)">Java</a></li>
<li><a href="BeanShell" title="BeanShell">BeanShell</a></li>
<li><a href="Clojure" title="Clojure">Clojure</a></li>
<li><a href="Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy</a></li>
<li><a href="JRuby" title="JRuby">JRuby</a></li>
<li><a href="Jython" title="Jython">Jython</a></li>
<li><a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a></li>
<li><a href="Processing" title="Processing">Processing</a></li>
<li><a href="Rhino_(JavaScript_engine)" title="Rhino (JavaScript engine)">Rhino</a></li>
<li><a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a></li>
<li><a href="Oxygene_(programming_language)" title="Oxygene (programming language)">Oxygene</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Community</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Conferences</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="JavaOne" title="JavaOne">JavaOne</a></li>
<li><a href="Devoxx" title="Devoxx">Devoxx</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Organizations</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Apache_Software_Foundation" class="mw-redirect" title="Apache Software Foundation">Apache Software Foundation</a></li>
<li><a href="Eclipse_Foundation" title="Eclipse Foundation">Eclipse Foundation</a></li>
<li><a href="Java_Community_Process" title="Java Community Process">Java Community Process</a></li>
<li><a href="Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a></li>
<li><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>, <a href="Sun_Microsystems_Laboratories" class="mw-redirect" title="Sun Microsystems Laboratories">Sun Microsystems Laboratories</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="James_Gosling" title="James Gosling">James Gosling</a></li>
<li><a href="Arthur_van_Hoff" title="Arthur van Hoff">Arthur van Hoff</a></li>
<li><a href="Urs_H%C3%B6lzle" title="Urs Hölzle">Urs Hölzle</a></li>
<li><a href="Patrick_Naughton" title="Patrick Naughton">Patrick Naughton</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="3"><div><span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category</b> • <span class="nowrap"><span class="skin-invert-image noviewer" typeof="mw:File"></span> </span><a href="Portal%3AComputer_programming" title="Portal:Computer programming">Computer programming portal</a></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-04-30" href="https://en.wikipedia.org/wiki/?title=Java_bytecode&amp;oldid=1288099378">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>